home *** CD-ROM | disk | FTP | other *** search
- ; ****************************************
- ; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
- ; ** CODED BY: TANGO **
- ; ** MUSIC BY: COUNT **
- ; ****************************************
-
- opt c-
- section blitter,code_c Chip Ram please !!
- include df1:definitions Give me some hardware reggies
- include df1:macros Give me some macros
-
-
- ;LOCAL CONSTANTS
-
- icra equ $bfed01
- allocmem =-30-168
- freemem =-30-180
- fontmemory =4000
-
-
- TAKEOVER:
-
- LEA custom,a5
- LEA GFXLIB(PC),a1 Point to 'graphics.library'
- MOVEQ #0,D0 Doesn't matter which version
- MOVE.L 4.w,a6 EXECBASE
- jsr -132(a6) task switching off (forbid)
- JSR -$228(a6) Openlibrary
- MOVE.L D0,GFXBASE Store library address
-
-
- ;Now put the graphic addresses in the CopperList
-
- move.l screenx,d1 Bitplane memory address
- move.w d1,bp1lo+2 for scroll 1.
- swap d1
- move.w d1,bp1hi+2
-
- move.l screenx,d1 Bitplane memory address
- ADD.L #6000,D1
- move.w d1,bp3lo+2 for scroll 1.
- swap d1
- move.w d1,bp3hi+2
-
- move.l screenx,d1 Bitplane memory address
- ADD.L #6000*2,D1
- move.w d1,bp5lo+2 for scroll 1.
- swap d1
- move.w d1,bp5hi+2
-
- move.l screeny,d1 Bitplane memory address
- move.w d1,abp1lo+2 for scroll 2.
- swap d1
- move.w d1,abp1hi+2
-
- move.l screeny,d1 Bitplane memory address
- ADD.L #10000,D1
- move.w d1,abp3lo+2 for scroll 2.
- swap d1
- move.w d1,abp3hi+2
-
- move.l screeny,d1 Bitplane memory address
- ADD.L #10000*2,D1
- move.w d1,abp5lo+2 for scroll 2.
- swap d1
- move.w d1,abp5hi+2
-
-
- ; ** SET UP EVEN BITPLANES 2,4,6 **
-
- MOVE.L #PLAY2,D1
- MOVE.W D1,BP2LO+2
- SWAP D1
- MOVE.W D1,BP2HI+2
-
- MOVE.L #PLAY2,D1
- ADD.L #10240,D1
- MOVE.W D1,BP4LO+2
- SWAP D1
- MOVE.W D1,BP4HI+2
-
- MOVE.L #PLAY2,D1
- ADD.L #10240*2,D1
- MOVE.W D1,BP6LO+2
- SWAP D1
- MOVE.W D1,BP6HI+2
-
- move.l GFXBASE,d0 Move gfxbase offset to d0
- MOVE.L D0,A6
- MOVE.W #$80,dmacon(a5) Turn off copper whilst changing it
- MOVE.L $32(A6),WBCOPPER Store old (WBench) copper address
- MOVE.L #OURCOPPER,$32(A6) Point to new copper list (our own)
- MOVE.W #$8080,dmacon(a5) Re-enable copper
- MOVE.W #$8010,intena(a5)
- MOVE.L $6c,old Save work bench interrupt
- MOVE.L #LEV3,$6c Point to were to set up interrupt
- move.w intenar(a5),systemints
- move.b #%01111111,icra Kill keyboard.
-
- WAIT:
- BTST #6,$BFE001 This waits for the left
- BNE.S WAIT mouse button to be pressed
- move.l 4.w,a6 EXECBASE
- MOVE.L old,$6c Restore system interrupts
- MOVE.L GFXBASE,A6
- MOVE.W #$80,dmacon(a5) Disable DMA
- MOVE.L WBCOPPER,$32(A6) Restore old copperlist
- MOVE.W #$8080,dmacon(a5) Enable DMA
- move.w systemints,d0 Systems interrupt
- or.w #$c000,d0
- move.w d0,intena(a5) Enable OS interrupts
- move.b #%10011011,icra Enable keyboard
- clr.w $dff0a8 Clear music
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- move.w #$f,$dff096
- rts
-
-
- ERROR:
- move.l 4.w,a6 Get EXECBASE
- jsr -138(a6) Permit ( multi-tasking on )
- moveq #0,d0 Clear d0
- RTS Return to AmigaDOS
-
-
- ;This is the NEW level 3 interrupt
-
- LEV3:
- Save_all Save all registers to the stack
- lea custom,a5
- AND #$10,intreqr(a5) Check if interrupt is from Copper
- BNE out
- move.w #$8010,$9c Cause Copper interrupt
-
- ; ** Main Routines called every VBI **
-
- bsr bounce2
- bsr testscroll
- bsr bounce
- bsr testscroll2
-
- out:
- Return_all
- DC.W $4ef9 hex value for JMP instruction
- old:
- DC.L 0 will jump to normal interrupt
-
-
- ; ** THE SCROLL ROUTINE **
-
- testscroll:
- tst.l stopper
- beq.s scroll
- sub.l #1,stopper
- rts
- scroll:
- cmp.l #30,val Blitshifted all <<<
- blo.s coarse_scroll_it No then get doing it !!
- bsr blit_char Blit letter to screen
- clr.l val Reset index
- coarse_scroll_it:
- bsr coarse Scroll all line
- rts
-
- testscroll2:
- tst.l stopper2 Test for pause.
- beq.s scroll2
- sub.l #1,stopper2
- rts
- scroll2:
- cmp.l #30,val2 Blitshifted all <<<
- blo.s coarse_scroll_it2 No then get doing it blitter man !!
- bsr blit_char2 Blit letter to screen
- clr.l val2 Reset index
- coarse_scroll_it2:
- bsr coarse2 Scroll all line
- rts
-
-
- ; ** BLIT LETTER ON THE SCREEN **
-
- blit_char
- jsr text
- lea custom,a5 Get custom chip address
- move.l screenx,a0 The screen on which scrolly is.
- move.l #font,a1 Put font in blitter source
- add.l d2,a1
- MOVE.L #2,D1
- blit_test:
- btst #14,$dff002 Blitter busy !!!
- bne blit_test Lets wait till she finishes !
- move.w #$ffff,bltafwm(a5) Mask
- move.w #$ffff,bltalwm(a5) Mask
- move.l a0,bltdpth(a5) Blitter dest D (BOTTOM OF SCREEN)
- move.l a1,bltapth(a5) Blitter source A (SCROLLING FONT)
- move.w #36,bltamod(a5) Modulo (20-1)*2
- move.w #36,bltdmod(a5) Modulo (20-1)*2
- move.w #$9f0,bltcon0(a5) Minterms D=A
- clr.w bltcon1(a5) Set Ascending mode
- move.w #32*64+2,bltsize(a5) Blit size (SIZE OF FONT)
- ADD.L #6000,A0
- ADD.L #40*200,A1
- DBF D1,BLIT_TEST
- rts Return
-
-
- ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
- ;
- ; FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
-
- coarse:
- lea custom,a5
- move.l screenx,a0
- move.l a0,a1
- add.l #2,a1
- move.l #2,d1
- move speed,d2
- incl #4,val
- ror #4,d2 ; Set to correct bits (12-15)
- or.w #$09f0,d2
- blit_wait:
- btst #14,$dff002
- bne blit_wait
- move.l #-1,bltafwm(a5)
- move.l a1,bltapth(a5)
- move.l a0,bltdpth(a5)
- move.w #0,bltamod(a5)
- move.w #0,bltdmod(a5)
- move.w d2,bltcon0(a5)
- move.w #32*64+20,bltsize(a5)
- add.l #6000,a0
- add.l #6000,a1
- dbf d1,blit_wait
- rts
-
- speed: dc.w 12
-
-
- ; ** SCROLL NUMBER TWO **
- ;
- ; DOCUMENTED IN SCROLL NUMBER ONE.
-
- blit_char2:
- jsr text2
- lea custom,a5
- move.l screeny,a0
- move.l #font,a1
- add.l d2,a1
- MOVE.L #2,D6
- blit_test2:
- btst #14,$dff002
- bne blit_test2
- move.w #$ffff,bltafwm(a5)
- move.w #$ffff,bltalwm(a5)
- move.l a0,bltdpth(a5)
- move.l a1,bltapth(a5)
- move.w #36,bltamod(a5)
- move.w #36,bltdmod(a5)
- move.w #$9f0,bltcon0(a5)
- clr.w bltcon1(a5)
- move.w #32*64+2,bltsize(a5)
- ADD.L #10000,A0
- ADD.L #40*200,A1
- DBF D6,BLIT_TEST2
- rts
-
- coarse2:
- lea custom,a5
- move.l screeny,a0
- move.l a0,a1
- add.l #2,a1
- move.l #2,d4
- incl #4,val2
- move speed2,d7
- ror #4,d7
- or #%100111110000,d7
- blit_wait2:
- btst #14,$dff002
- bne blit_wait2
- move.l #-1,bltafwm(a5)
- move.l a1,bltapth(a5)
- move.l a0,bltdpth(a5)
- move.w #0,bltamod(a5)
- move.w #0,bltdmod(a5)
- move.w d7,bltcon0(a5)
- move.w #32*64+20,bltsize(a5)
- add.l #10000,a0
- add.l #10000,a1
- dbf d4,blit_wait2
- rts
-
- speed2: dc.w 12
-
-
- ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
- ;
- ; ENTRYS : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
- ; : DELTAY-WAIT COMMAND IN COPPERLIST.
- ; FUNCTION: BOUNCE THE SCROLLY MESSAGE.
-
- bounce:
- cmp.l #56,ycord
- beq.s up
- add.l #1,ycord
- sub.b #1,deltay
- rts
- up: cmp.l #56,ycordminus
- beq.s rst_cord
- add.l #1,ycordminus
- add.b #1,deltay
- rts
- rst_cord:
- clr.l ycord
- clr.l ycordminus
- rts
-
- ycord: dc.l 0
- ycordminus: dc.l 0
- even
-
-
- ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
- ;
- ; ENTRYS : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
- ; : DELTAY2-WAIT COMMAND IN COPPERLIST.
- ; FUNCTION: BOUNCE THE SCROLLY MESSAGE.
-
- bounce2:
- cmp.l #56,ycord2
- beq.s up2
- add.l #1,ycord2
- add.b #1,deltay2
- rts
- up2:cmp.l #56,ycordminus2
- beq.s rst_cord2
- add.l #1,ycordminus2
- sub.b #1,deltay2
- rts
- rst_cord2:
- clr.l ycord2
- clr.l ycordminus2
- rts
-
- ycord2: dc.l 0
- ycordminus2:dc.l 0
- even
-
-
- ; ** CHARACTER DECODER ROUTINE **
-
- ; CHARACTER BASE ADDRESS RETURNED IN D2
- ; JUST ADD THIS TO YOUR FONT ADDREES.
-
- text:
- Clr.l d1
- move.l acurent,a2
- move.b (A2),d1
- cmp.b #254,d1
- beq.s stop_scroll
- Cmp.b #255,d1
- bne over
- Move.l #Texter,a2
- MOVE.L #TEXTER,ACURENT
- Move.b (a2),d1
- Over
- Add.l #1,Acurent
- Lea Char,a1
- Sub.l #32,d1
- Add.l d1,d1
- Move.w (a1,d1),d2 ; CHAR BASE ADDRESS IN D2.
- Rts
- stop_scroll:
- move.l #5136,d2 ; Blank letter.
- add.l #1,acurent
- move.l #150,stopper
- rts
-
-
- ; ** CHARACTER OFFSETS TO FONT **
- Char:
- dc.w 5136,3864,0,0,0,0,0,5132,3868,3872,0,0
- dc.w 5128,3876,5124,0,3860,2584,2588,2592,2596,3840
- dc.w 3844,3848,3852,3856,0,0,0,0,0,5120,0
- dc.w 0,4,8,12,16,20,24,28,32,36,1280,1284,1288,1292,1296
- dc.w 1300,1304,1308,1312,1316,2560,2564,2568,2572,2576,2580
- dc.w 0,0,0
-
-
- ; ** MESSAGE NUMBER ONE **
- Acurent:
- DC.L Texter
- Texter:
- DC.B " CRYPTIC UK STRIKE BACK !!! "
- DC.B " TANGO ",254
- DC.B " YES WELL I'M OFF FOR NOW TO SEE IF THIS ROUTINE WORKS. "
- DC.B 255
- even
-
-
- text2:
- Clr.l d1
- move.l acurent2,a2
- move.b (A2),d1
- cmp.b #254,d1
- beq pause_scroll
- Cmp.b #255,d1
- bne over2
- Move.l #Texter2,a2
- MOVE.L #TEXTER2,ACURENT2 ; RESET TO BEGINING OF MESSAGE.
- Move.b (a2),d1
- Over2:
- Add.l #1,Acurent2
- Lea Char,a1
- Sub.l #32,d1
- Add.l d1,d1
- Move.w (a1,d1),d2 ; CHAR BASE ADDRESS IN D2.
- rts
- pause_scroll:
- move.l #5136,d2
- add.l #1,acurent2
- move.l #150,stopper2
- rts
-
-
- ; ** MESSAGE NUMBER TWO **
- Acurent2
- Dc.l Texter2
- Texter2:
- Dc.b "WOW !!! THIZ IS SCROLLER NUMBER 2 ",254," AND ITS COOOOOL... ",255
- even
-
-
-
-
- ; ** THE COPPERLIST **
-
- OURCOPPER:
- dc.w $120,0
- dc.w $122,0
- dc.w bpl1mod,0,bpl2mod,0
- dc.w diwstrt,$2c81+32,diwstop,$2cc1-16
- dc.w bplcon0,$6600,bplcon1,$0000
- dc.w ddfstrt,$38,ddfstop,$d0
- dc.w color08,$000,color09,$f00,color10,$0f0,color11,$fff
- dc.w color12,$eaf,color13,$145,color14,$a00,color15,$eee
- bp2lo: dc.w bpl2ptl,$0000
- bp2hi: dc.w bpl2pth,$0000
- bp4lo: dc.w bpl4ptl,$0000
- bp4hi: dc.w bpl4pth,$0000
- bp6lo: dc.w bpl6ptl,$0000
- bp6hi: dc.w bpl6pth,$0000
- deltay2:wait $3009,$fffe
- dc.w color01,$00F
- bp1lo: dc.w bpl1ptl,$0000
- bp1hi: dc.w bpl1pth,$0000
- bp3lo: dc.w bpl3ptl,$0000
- bp3hi: dc.w bpl3pth,$0000
- bp5lo: dc.w bpl5ptl,$0000
- bp5hi: dc.w bpl5pth,$0000
- deltay: wait $c009,$fffe
- abp1lo: dc.w bpl1ptl,$0000
- abp1hi: dc.w bpl1pth,$0000
- abp3lo: dc.w bpl3ptl,$0000
- abp3hi: dc.w bpl3pth,$0000
- abp5lo: dc.w bpl5ptl,$0000
- abp5hi: dc.w bpl5pth,$0000
- DC.W color01,$eee,color02,$dde
- DC.W color03,$bbd
- DC.W color04,$aac
- DC.W color05,$88c
- DC.W color06,$77b
- DC.W color07,$65a
- end_copper
-
-
- ;LOCAL CONSTANTS
-
- WBCOPPER: DC.L 0
- GFXLIB: DC.B "graphics.library",0
- GFXBASE: DC.L 0
- systemints: dc.l 0
- scroll_offset: dc.l 0
- screenx: dc.l picture
- screeny: dc.l picture2
- letter: dc.b 0
- letter2: dc.b 0
- val: dc.l 0
- val2: dc.l 0
- stopper: dc.l 0
- stopper2: dc.l 0
-
-
- ;BINARY FILES TO BE INCLUDED
- EVEN
- picture
- dcb.b 6000*3,0
- picture2:
- dcb.b 10000*3,0
- font
- incbin df0:METALCHARS
- PLAY2:
- INCBIN DF1:PIC.IFF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-